package webjoch.process.strategies;

import webjoch.wrappers.Room;

public abstract class Boss{
    /*
     * For information on Bosses, try http://runescape.wikia.com/wiki/Dungeoneering/Bosses
     */
	public enum BossType{
	    /*  Format: Does class exist | Is class done | Tested working 
	     *  Example:
	     *    Y _ _ 
	     *    class exists, class isn't completed, and isn't tested working
	     */
	    
	    //Beasts
		ICY_BONES,                //_ _ _
		LUMINESCENT_ICEFIEND,     //_ _ _
		WARPED_GULEGA,            //_ _ _
		
		
		//Undead
		SKELETAL_HORDE,           //_ _ _
		UNHOLY_CURSEBEARER,       //_ _ _
		SKELETAL_TRIO,            //_ _ _
		GRAVECREEPER,             //_ _ _
		DREADNAUT,                //_ _ _
		
		//Mages
		ASTEA_FROSTWEB,           //Y _ _
		HOBGOBLIN_GEOMANCER,      //_ _ _
		LEXICUS_RUNEWRIGHT,       //_ _ _
		NECROLORD,                //_ _ _
		BLINK,                    //_ _ _
		
		
		//Behemoths
		GLUTTONOUS_BEHEMOTH,      //Y _ _
		BULWARK_BEAST,            //_ _ _
		STOMP,                    //_ _ _
		RUNEBOUND_BEHEMOTH,       //_ _ _
		HOPE_DEVOURER,            //_ _ _
		
		//Stalkers
		PLANE_FREEZER_LAKHRAHNAZ, //_ _ _
		NIGHT_GAZER_KHIGHORAHK,   //_ _ _
		SHADOW_FORGET_IHLAKHIZAN, //_ _ _
		FLESH_SPOILER_HAASGHENAHK,//_ _ _
		WORLD_GORGER_SHUKARHAZH,  //_ _ _
		
		//Kal'Gerion demons
		TOKASH_THE_BLOODCHILLER,  //_ _ _
		HARLAKK_THE_RIFTSPLITTER, //_ _ _
		BALLAK_THE_PUMMELLER,     //_ _ _
		YKLAGOR_THE_THUNDEROUS,   //_ _ _
		KALGER_THE_WARMONGER,     //_ _ _
		
		//Army Captains
		RAMMERNAUT_HOSKINS,       //_ _ _
		SAGITTARE_BOLTON          //_ _ _
	}
	
	public Room room;
	public final static int STRANGE_WALL_CLOSE = 49695;
	public final static int STRANGE_WALL_OPEN = 49696;
	
	public void setRoom(Room room){
		this.room = room;
	}
	
	public Room getRoom(){
		return room;
	}
	
	public static boolean isBossRoom(Room room){
		return room.getObject(new int[] {STRANGE_WALL_CLOSE, STRANGE_WALL_OPEN}) != null;
	}
	
	public abstract boolean isValid();
	
	public boolean isFinished(){
		return room.getObject(STRANGE_WALL_OPEN) != null;
	}
	
	public abstract BossType getBossType();
	
	public abstract int loop();
}
